問題解説: 研究の国 第一のトラブル

問題文

一行は学校に行ってみたいというエイトの夢を叶えるために、学校を訪れた。

エイト「ここが学校か~、頭が良さそうな感じがしていいわね!」

女の子「いっけない、遅刻遅刻〜」

「「いたっ!?」」

女の子「ごめんなさい。昨日から魔法陣は動かないし寝坊して遅刻するし踏んだり蹴ったりだわっ」

エイト「最後は自分のせいなんじゃ……。ちょっと待って! この人たちなら力になれるかもしれないわ!」

女の子「学内のWebページにも繋がらない。色々触ってみたけど無理だったの……DNSサーバが原因じゃないかと思うんだけど」

エイト「うーん……。いったいどのあたりを触ってみたの?」

女の子「学内のWebサーバに繋がらなくて、でも学外のWebサーバには繋がってたの。よくわからなくて、スイッチも設定を見ていろいろやってたら今度は学外サーバにも繋がらなくなっちゃって…もうよくわからないわ」

エイト「なんだか他人事とは思えないわ……助けてあげてくれない?」

達成すべき事項

  • http://devtest.dns.1.mgi(コンテストネットワークでのみアクセス可能なドメイン)から任意のHTML(テストページを含む)を取得する。
    • スイッチ(2960-A_fa0/11)に接続したPCのDNSをdns.1.mgi(192.168.19.10) に設定した上でアクセスできることが達成条件です。

解説

発生していたトラブルは
① 手元のスイッチからDNSサーバへ疎通が取れない
② DNSサーバが学内ドメインの名前解決に失敗している
の2点でした。

トラブル①について

お手持ちのPCとスイッチを接続しIPアドレスを設定してもDNSサーバへ疎通が取れなかったと思います。
ここでスイッチのコンフィグを見てみると、

 interface FastEthernet11
 switchport access vlan <各チームに割り当てられたVLAN ID>
 switchport mode trunk

となっています。
“switchport mode trunk”を削除するか、”switchport mode access” と設定をしてあげることでトラブル①は解決します。

トラブル②について

用意されたDNSサーバに対して学外ドメイン(google.comやyahoo.co.jpなど)の名前解決を行う場合はしっかりIPアドレスが返ってきます。
一方で学内ドメイン(devtest.dns.1.mgi)はIPアドレスが返ってきません。しかし、会場に提供されていたWi-Fiを経由して運営が用意したDNSサーバを使ってdevtest.dns.1.mgiにアクセスすると、正常に名前解決は成功し、テストページを開くことができました。
女の子が用意したDNSサーバに何か問題がありそうです。

DNSサーバにはdnsmasqがインストールされていました。何かあったときはエラーログです。/var/log/syslogを見てみると

 Aug 25 11:19:23 dns daemon.warn dnsmasq[18697]: possible DNS-rebind attack detected: devtest.dns.1.mgi

のような出力がされています。
DNS-rebind attackとは、

DNS Rebindingは、DNSの返すIPアドレスを巧妙に変化させることにより、JavaScriptやJavaアプレットなどのsame origin policyを破り、インターネットからローカルネットワーク(通常外部からはアクセスできない)などに対してアクセスする手法をいう。

DNS Rebinding ~今日の用語特別版~ – 徳丸浩の日記より引用)

と説明されています。TTLを極端に短くした状態で(5秒など)ターゲットに悪意のあるドメインへアクセスさせ何らかのスクリプトを読み込ませます。その後、攻撃者は悪意のドメインのレコードをプライベートIPアドレスへ変更することで、攻撃者はスクリプトを使用して情報取得を行うことが可能となります。

先ほどのdnsmasqのログは 「DNS Rebinding攻撃と思われる挙動を検知した」、と言っていることがわかります。
思えば、devtest.dns.1.mgiのレコードを引くと返ってくるのはプライベートIPアドレス(172.16.67.2)です。

となれば、dnsmasqの防御機能を無効化する or ドメインのホワイトリストを設定してあげればOKです。

/etc/dnsmasq.confを見てみると、

 stop-dns-rebind

という設定が末尾に書かれています。これをコメントアウトしdnsmasqを再起動すると名前解決ができるようになります。
あるいは、

 rebind-domain-ok=1.mgi

という設定を加えることでも名前解決ができるようになります。

余談

どちらのトラブルも私の実体験で起こったものです。
トラブル①に関しては、スイッチの設定をあれこれいじったり試していて、いつの間にかこうなっていた…というトラブルでした。
トラブル②に関しては、大学の研究室に一時的にOpenWRTを載せたルータを設置したときのことでした。Webアクセスは問題なく行えるのに、なぜか学内のNTPサーバに対する時刻同期が出来ないと研究室のメンバーに言われ、最初は学内のNTPサービスが終わっちゃったんだなあ…と思ってました。IPアドレスが返ってこないということは抹消されたんだな、と。授業中、ふと学内無線LANを使用してNTPサーバの名前解決を行ったところ、消えたと思っていたIPアドレスが返ってきました。奴は生きていた。帰ってきたんだ…。ここからは必死に原因を調査して解決した…というお話でした。